package main

import (
	"flag" //flag包实现了命令行参数的解析。
	"fmt"
	"os"
)
/**

 */
type Cmd struct {
	helpFlag bool
	versionFlag bool
	cpOption string
	class string
	args []string //切片slice
}
func printUsage() {
	// os.Args : Args保管了命令行参数，第一个是程序名
	fmt.Printf("Usage : %s [-options] class [args...]\n",os.Args[0])
}
func parseCmd () *Cmd{
	cmd := &Cmd{}
	flag.Usage = printUsage
	// 注册flag 参数含义：接收变量，flag名称，默认值，描述
	flag.BoolVar ( &(cmd.helpFlag),"help",false,"print help message")
	flag.BoolVar ( &(cmd.helpFlag),"?",false,"print help message")
	flag.BoolVar ( &(cmd.versionFlag),"version",false,"print version and exit")
	flag.StringVar(&(cmd.cpOption),"classpath","","classpath")
	flag.StringVar(&(cmd.cpOption),"cp","","classpath")
	// 解析 注册的flag
	flag.Parse()
	args := flag.Args() //返回解析之后剩下的非flag参数。（不包括命令名）
	if len(args) > 0 {
		cmd.class = args[0]
		cmd.args = args[1:] // 从数组中获取切片
	}
	return cmd
}

